/*
 *  change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package transervfx.Vista.CompPersonalizado.Servicio;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.AnchorPane;
import transervfx.Dato.Entidad.Cliente;
import transervfx.Dato.Entidad.Fisico;
import transervfx.Dato.Entidad.Juridico;
import transervfx.Logica.GestorCliente;
import transervfx.Vista.RegistrarEncomienda;
import utilidades.autocompletar.TextBoxAutoCompletar;
import utilidades.dialog.OptionPane;
import utilidades.number.IntegerTextField;

/**
 *
 * @author oscar
 */
public class ClienteComp extends AnchorPane {
    
    
    @FXML
    private TextBoxAutoCompletar<Cliente> nombre;
    @FXML
    private IntegerTextField idCliente;
    @FXML
    private TextField tipoDoc;
    @FXML
    private TextField nroDoc;
    @FXML
    private TextField cuit;
    @FXML
    private TextField condicionFrenteIva;
    
 
   private Cliente cliente;
   private ObjectProperty<Cliente> clienteProperty = new SimpleObjectProperty<Cliente>(cliente);
    
    
   final ObservableList<Cliente> dataSourceClientes = FXCollections.observableArrayList();
    
    
   

    public ClienteComp() {
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("ClienteFXML.fxml"));
        fxmlLoader.setRoot(this);
        fxmlLoader.setController(this);

        try {
            fxmlLoader.load();
        } catch (IOException exception) {
            throw new RuntimeException(exception);
        }
           
        init();
    }

    private void init() {
           this.nombre.setData(GestorCliente.getInstance().findAll());

        //esto es una seleccion en el autofill
        this.nombre.addListener(new ChangeListener<Cliente>() {
            @Override
            public void changed(ObservableValue<? extends Cliente> selected, Cliente oldValue, Cliente newCliente) {
                if (newCliente != null) {
                   //le agarra el ataque ja
                        cliente = GestorCliente.getInstance().findByCompleto(newCliente);
                        clienteProperty.set(cliente);
                        setearCamposCliente(cliente);
                       
                    idCliente.setText(cliente.getId() + "");      
                   
                }
            }
        });



        this.idCliente.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
            public void handle(KeyEvent t) { //WHEN USER PRESS DOWN ARROW KEY FOCUS TRANSFER TO LISTVIEW
                if (t.getCode() == KeyCode.ENTER) {
                    System.out.println("apreta el enter sobre el campo nro cliente, busca el cliente");

                    if (!idCliente.getText().isEmpty()) {
                     
                            //tenes algun cliente cargado? ahi creo uno
                            Long nro_cliente = idCliente.getNumber().longValue();
                            cliente = GestorCliente.getInstance().findById(nro_cliente);
                            
                            clienteProperty.set(cliente);
                            if (cliente!= null) {
                                setearCamposCliente(cliente);
                               
                    

                            } else {
                                borrarCamposCliente();
                                OptionPane.showOptionDialog("Error", "no existe el cliente con nro " + nro_cliente, "", OptionPane.ERROR_MESSAGE, null);

                            }

                   

                    }


                }
            }
        });
        
    }
    
    
     private void setearCamposCliente(Cliente cliente) {

      
        if (cliente instanceof Fisico) {

           
            this.tipoDoc.setVisible(true);
            this.nroDoc.setVisible(true);

            Fisico fisico = (Fisico) cliente;
            this.nombre.setText(fisico.getNombres() + " " + fisico.getApellido());
       //
            this.nroDoc.setText(fisico.getNroDoc() + "");
            this.tipoDoc.setText(fisico.getTipoDoc());
            this.cuit.setText(fisico.getCuit() + "");
            this.condicionFrenteIva.setText(fisico.getCondicionFrenteIva());

        } else {
            if (cliente instanceof Juridico) {
               
                this.tipoDoc.setVisible(false);
                this.nroDoc.setVisible(false);
                
                Juridico juridico = (Juridico) cliente;
                this.nombre.setText(juridico.getRazonSocial());
             
                this.cuit.setText(juridico.getCuit().toString());
                this.condicionFrenteIva.setText(juridico.getCondicionFrenteIva());
            }

        }
    }
     
      private void borrarCamposCliente() {

        
        this.tipoDoc.setVisible(true);
        this.nroDoc.setVisible(true);
        this.idCliente.setText("");
        this.nombre.setText("");
        this.nroDoc.setText("");
        this.tipoDoc.setText("");
        this.cuit.setText("");
        this.condicionFrenteIva.setText("");
       
        this.cliente=null;
        this.clienteProperty.setValue(null);
    }

    public ObjectProperty<Cliente> getClienteProperty() {
        return this.clienteProperty;
    }

    public Cliente getCliente() {
        return this.cliente;
    }

    public boolean validar() {
        return this.cliente!=null;
    }
    
    
}
